package material.encapsulation_algorithm.prepareRecipe;

/**
 * 咖啡因饮料是一个抽象类
 */
public abstract class CaffeineBeverage {
    /**
     * 现在．用同一个prepareRecipe()方法来处理茶和咖啡。piepareRecipe()被声明为final．
     * 因为我们不希望子类覆盖这个方法!我们将步骤2和步骤4泛化成为brew()和addCondiments()。
     */
    public final void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    /**
     * 为咖啡和茶处理这些方法的做法不同，所以这两个方法必须被声明为抽象，剩余余的东西留给子类去操心。
     */
    public abstract void brew();

    public abstract void addCondiments();

    public void boilWater() {
        System.out.println("将水煮沸");
    }

    public void pourInCup() {
        System.out.println("将饮料倒入杯中");
    }
}
